/*
Copyright (c) 2020-2021, Huawei Technologies Co., Ltd
 All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

* Description: 2D图表可视化插件界面类
*/
#ifndef UI_CURVE_WIDGET_H
#define UI_CURVE_WIDGET_H

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QVBoxLayout>

#include "qwt_plot.h"

namespace chart_plugin {
class UiCurveWidget {
public:
    UiCurveWidget() = default;
    ~UiCurveWidget() = default;

    /*
     * 功能：设置界面元素，初始化界面
     * 输入参数：widget-QWidget窗口
     * 输出参数：无
     * 返回值：无
     */
    void SetupUi(QWidget &widget);

private:
    /*
     * 功能：设置调色板
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void InitPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板WindowText颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetWindowTextPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Button颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetButtonPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Light颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetLightPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Midlight颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetMidlightPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Dark颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetDarkPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Mid颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetMidPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Text颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetTextPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板BrightText颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetBrightTextPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板ButtonText颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetButtonTextPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Base颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetBasePalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Window颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetWindowPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板Shadow颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetShadowPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板AlternateBase颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetAlternateBasePalette(QPalette &palette) const;

    /*
     * 功能：设置调色板ToolTipBase颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetToolTipBasePalette(QPalette &palette) const;

    /*
     * 功能：设置调色板ToolTipText颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetToolTipTextPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板PlaceholderText颜色角色
     * 输入参数：palette-调色板
     * 输出参数：无
     * 返回值：无
     */
    void SetPlaceholderTextPalette(QPalette &palette) const;

    /*
     * 功能：设置调色板颜色角色
     * 输入参数：palette-调色板， role-颜色角色，brush-颜色刷
     * 输出参数：无
     * 返回值：无
     */
    void SetBrushColorRole(QPalette &palette, QPalette::ColorRole role, const QBrush &brush) const;

    /*
     * 功能：设置widget窗口UI
     * 输入参数：widget-窗口
     * 输出参数：无
     * 返回值：无
     */
    void SetupWidgetUi(QWidget &widget);

    /*
     * 功能：设置QwtPlot窗口UI
     * 输入参数：qwtPlot-QwtPlot
     * 输出参数：无
     * 返回值：无
     */
    void SetupQwtPlotUi(QwtPlot &qwtPlot);

    /*
     * 功能：设置QHBoxLayout
     * 输入参数：horizontalLayout-QHBoxLayout
     * 输出参数：无
     * 返回值：无
     */
    void SetupHorizontalLayoutUi(QHBoxLayout &horizontalLayout);

private:
    QVBoxLayout *verticalLayout { nullptr };
    QwtPlot *qwtPlot { nullptr };
    QHBoxLayout *horizontalLayout { nullptr };
    QSpacerItem *horizontalSpacer { nullptr };
    QLabel *varianceLabel { nullptr };
    QLabel *varianceValueLabel { nullptr };
    QSpacerItem *horizontalSpacerRight { nullptr };
    friend class CurveDisplay;
};
} // namespace chart_plugin
#endif // UI_CURVE_WIDGET_H